package com.kexio.enterprise.integration.event;

import com.kexio.enterprise.integration.event.domain.Event;
import com.kexio.enterprise.integration.event.enums.EventPriority;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

/**
 * 事件服务接口（重构版本）
 * 
 * 采用独立文件方式组织相关类，提高代码的可维护性和可扩展性
 * 
 * @author Kexio
 * @since 1.0.0
 */
public interface RefactoredEventService {

    /**
     * 发布事件
     * 
     * @param event 事件
     */
    void publishEvent(Event event);

    /**
     * 异步发布事件
     * 
     * @param event 事件
     * @return 异步结果
     */
    CompletableFuture<Void> publishEventAsync(Event event);

    /**
     * 订阅事件
     * 
     * @param eventType 事件类型
     * @param handler   处理器
     */
    void subscribeEvent(String eventType, EventHandler handler);

    /**
     * 取消订阅
     * 
     * @param eventType 事件类型
     * @param handler   处理器
     */
    void unsubscribeEvent(String eventType, EventHandler handler);

    /**
     * 获取事件历史
     * 
     * @param eventType 事件类型
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 事件列表
     */
    List<Event> getEventHistory(String eventType, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 重放事件
     * 
     * @param eventId 事件ID
     */
    void replayEvent(String eventId);

    /**
     * 获取事件统计
     * 
     * @return 统计信息
     */
    Map<String, Object> getEventStatistics();

    /**
     * 事件处理器接口
     */
    @FunctionalInterface
    interface EventHandler {
        void handle(Event event);
    }
}
